package cn.flying.cloud.gateway.redis.service;

import javax.annotation.Resource;

import java.util.concurrent.TimeUnit;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

/**
 * Redis 服务
 *
 * @author: admin
 * @date: 2023年06月15日 18:01
 * @version: 1.0
 */
@Component
public class RedisService {

    @Resource
    private RedisTemplate<String, Object> redisTemplate;

    /**
     * 获取redisTemplate对象
     *
     * @return
     */
    public RedisTemplate<String, Object> redisTpl() {
        return redisTemplate;
    }

    /**
     * 放入缓存，不设置过期时间
     *
     * @param key
     * @param value
     */
    public void set(String key, Object value) {
        redisTemplate.opsForValue().set(key, value);
    }

    /**
     * 放入缓存，不设置过期时间，等同SET NX
     *
     * @param key
     * @param value
     */
    public void setIfAbsent(String key, Object value) {
        redisTemplate.opsForValue().setIfAbsent(key, value);
    }

    /**
     * 放入缓存，单位毫秒
     *
     * @param key
     * @param value
     * @param timeOut
     */
    public void set(String key, String value, Long timeOut) {
        redisTemplate.opsForValue().set(key, value, timeOut, TimeUnit.MILLISECONDS);
    }

    /**
     * 放入缓存，单位毫秒，等同SET NX
     *
     * @param key
     * @param value
     */
    public void setIfAbsent(String key, Object value, Long timeOut) {
        redisTemplate.opsForValue().setIfAbsent(key, value, timeOut, TimeUnit.MILLISECONDS);
    }

    /**
     * 从缓存中获取值
     *
     * @param key
     * @return
     */
    public Object get(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    /**
     * 清除缓存
     *
     * @param key
     */
    public void del(String key) {
        redisTemplate.delete(key);
    }
}
